const path = require('path');
const isProd = process.env.NODE_ENV === 'production';

module.exports = {
  // 环境变量
  env: {

  },
  // 在域的子路径下部署Next.js应用程序: 在构建时设置，并且必须重新构建才能更改，因为该值已在客户端捆绑包中内联。
  // 如使用`basePath: '/docs'`导致`/about`将自动构建为`/docs/about`.
  basePath: '',// 必须是空字符串或路径前缀
  // gzip压缩
  compress: isProd,
  images: {
    domains: ['fanyi-cdn.cdn.bcebos.com'],
    // deviceSizes: [640, 750, 828, 1080, 1200, 1920, 2048, 3840],
    // imageSizes: [16, 32, 48, 64, 96, 128, 256, 384],
  },
  // Use the CDN in production and localhost for development.
  // Next.js将自动使用您的资产前缀作为从/_next/路径（.next/static/文件夹）加载的JavaScript和CSS文件的前缀.
  assetPrefix: isProd ? 'https://cdn.mydomain.com' : '',
  /**
   * @title 自定义Webpack配置
   * @param {*} config 
   * @param {*} options 
   *  - buildId：String-构建ID，用作构建之间的唯一标识符
   *  - dev：Boolean-指示编译是否将在开发中完成
   *  - isServer：Boolean-true用于服务器端编译和false客户端编译
   *  - defaultLoaders：Object-Next.js内部使用的默认加载程序：
   *    - babel：Object-默认babel-loader配置
   */
  webpack: (config, { buildId, dev, isServer, defaultLoaders, webpack }) => {
    // Note: we provide webpack above so you should not `require` it
    // Perform customizations to webpack config
    config.plugins.push(new webpack.IgnorePlugin(/\/__tests__\//))
    config.resolve.alias['@'] = path.resolve('./src');
    
    // config.module.rules.push({
    //   test: /\.mdx/,
    //   use: [
    //     options.defaultLoaders.babel,
    //     {
    //       loader: '@mdx-js/loader',
    //       options: pluginOptions.options,
    //     },
    //   ],
    // })

    // Important: return the modified config
    return config
  },
  /**
   * import getConfig from 'next/config'
   * 在组件内部通过getConfig获取运行时变量
   */
  // 仅服务器的运行时配置
  serverRuntimeConfig: {
    // Will only be available on the server side
    mySecret: 'secret',
    secondSecret: process.env.SECOND_SECRET, // Pass through env variables
  },
  // 客户端和服务器端代码均可访问的所有内容
  publicRuntimeConfig: {
    // Will be available on both server and client
    staticFolder: '/static',
  },
  // 显示版本号会造成有人专门利用特定版本网页服务器漏洞进行攻击
  poweredByHeader: false,
  // 运行next buildNext.js，将使用dist而不是默认.next文件夹。
  distDir: 'dist',
  // 默认情况下，Next.js会将带有斜杠的URL重定向到没有斜杠的URL
  trailingSlash: false,
  // (全量)严格模式 <=> 单页:<React.StrictMode>
  // 仅用于突出显示应用程序中潜在问题的开发模式功能。它有助于识别不安全的生命周期，旧版API使用情况以及许多其他功能。
  reactStrictMode: true,
}